package me.sealer.ssm.service;

import me.sealer.ssm.model.Menu;
import me.sealer.ssm.page.PageResult;

import java.util.List;

/**
 * @author sealer
 * @date 2018/05/11.
 */
public interface MenuService {
    /**
     * 查询所有菜单列表
     *
     * @return 菜单列表
     */
    List<Menu> queryAllMenus();

    /**
     * 查询所有一级菜单（用于角色菜单控制， 角色目前只能绑定一级菜单的展示， 即有一级菜单的权限， 该一级菜单的子菜单都能显示）
     *
     * @return 一级惨淡列表
     */
    List<Menu> queryFirstMenus();

    /**
     * 分页查询菜单列表
     *
     * @param alias    菜单别名
     * @param type     菜单类型（NONE-中间节点, LINK-叶子节点）
     * @param level    菜单层级（该系统最高支持4级， 由设计实现约束）
     * @param pageNo   第几页
     * @param pageSize 每页多少条数据
     * @return 菜单列表
     */
    PageResult<Menu> queryMenusPage(String alias, String type, Integer level, int pageNo, int pageSize);

    /**
     * 根据给定的条件查询菜单列表， 条件可空
     *
     * @param alias 菜单别名
     * @param type  菜单烈性
     * @param level 菜单层级
     * @return 菜单列表
     */
    List<Menu> queryMenus(String alias, String type, Integer level);

    /**
     * 插入菜单
     *
     * @param menu 待插入菜单参数对象
     */
    void insertOne(Menu menu);

    /**
     * 删除menu菜单
     *
     * @param id    菜单id
     * @param alias 菜单别名
     * @param type  菜单类型
     */
    void deleteMenu(Integer id, String alias, String type);
}
